package com.wisely.highlight_spring4.other;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author GY
 * 2018年1月31日
 * 自定义代理类
 */
public class DynaProxyTestTime implements InvocationHandler {
    
    private Object target;//被代理的目标对象
    
    /*public DynaProxyTestTime(Object obj) {
        this.target = obj;
    }*/

    //实则为动态重写  动态传入接口的方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result;
        Long startTime = System.currentTimeMillis();
        System.out.println(method.getName()+"方法执行开始时间"+startTime);
        result = method.invoke(this.target, args);
        Long endTime = System.currentTimeMillis();
        System.out.println(method.getName()+"方法执行结束时间"+endTime);
        System.out.println("总耗时:"+(endTime-startTime)+"毫秒");
        return result;
    }
    
    /*public Object getProxy(){
        return Proxy.newProxyInstance(this.target.getClass().getClassLoader(), 
                this.target.getClass().getInterfaces(), this);
    }*/
    
    /**
     * @param obj
     * @return
     * GY
     * 2018年1月31日
     * 返回动态实现的接口的实现类代理对象
     */
    public Object bind(Object obj){
        this.target = obj;
        return Proxy.newProxyInstance(this.target.getClass().getClassLoader(), 
                this.target.getClass().getInterfaces(), this);
    }
    
    

}
